<?php


namespace Xcy\Hutool\Libs;


use Xcy\Hutool\ToolsUtil;

class RandomNameUtil
{
    /**
     * 生成随机昵称
     *
     * @return string
     */
    static function getNickName(): string
    {
        $adj_num = rand(0, count(self::$nickNameAdj) - 1);
        $n_num = rand(0, count(self::$nickNameN) - 1);
        return self::$nickNameAdj[$adj_num] . self::$nickNameN[$n_num];
    }

    /**
     * 随机女名
     *
     * @param boolean $surNameSupport <true> 是否包含复姓，如：上官、欧阳
     * @return string
     * @throws \Exception
     */
    static function getFemaleName($surNameSupport = true): string
    {
        if (ToolsUtil::mathRandom(0, 1) === 0) {
            return self::getFamilyName($surNameSupport) .
                self::$femaleName[ToolsUtil::mathRandom(0, count(self::$femaleName) - 1)] .
                self::$femaleName[ToolsUtil::mathRandom(0, count(self::$femaleName) - 1)];
        }
        return self::getFamilyName($surNameSupport) . self::$femaleName[ToolsUtil::mathRandom(0, count(self::$femaleName) - 1)];
    }

    /**
     * 随机男名
     *
     * @param boolean $surNameSupport <true> 是否包含复姓，如：上官、欧阳
     * @return string
     * @throws \Exception
     */
    static function getMaleName($surNameSupport = true): string
    {
        if (ToolsUtil::mathRandom(0, 1) === 0) {
            return self::getFamilyName($surNameSupport) .
                self::$maleName[ToolsUtil::mathRandom(0, count(self::$maleName) - 1)] .
                self::$maleName[ToolsUtil::mathRandom(0, count(self::$maleName) - 1)];
        }
        return self::getFamilyName($surNameSupport) . self::$maleName[ToolsUtil::mathRandom(0, count(self::$maleName) - 1)];
    }

    /**
     * 获取 百家姓/复姓 列表
     *
     * @return array
     */
    static function getFamilyNameList(): array
    {
        return [
            "sin" => self::$familyNameSin,
            "sur" => self::$familyNameSur,
        ];
    }

    /**
     * @throws \Exception
     */
    private static function getFamilyName($surNameSupport)
    {
        if ($surNameSupport) {
            $all = self::allFamilyNames();
            return $all[ToolsUtil::mathRandom(0, count($all) - 1)];
        } else {
            return self::$familyNameSin[ToolsUtil::mathRandom(0, count(self::$familyNameSin) - 1)];
        }
    }

    private static function allNames(): array
    {
        return array_merge(self::$femaleName, self::$maleName);
    }

    private static function allFamilyNames(): array
    {
        return array_merge(self::$familyNameSin, self::$familyNameSur);
    }

    private static $nickNameAdj = [
        '快乐的', '冷静的', '醉熏的', '潇洒的', '糊涂的', '积极的', '冷酷的', '深情的', '粗暴的', '温柔的', '可爱的', '愉快的',
        '义气的', '认真的', '威武的', '帅气的', '传统的', '潇洒的', '漂亮的', '自然的', '专一的', '听话的', '昏睡的', '狂野的',
        '等待的', '搞怪的', '幽默的', '魁梧的', '活泼的', '开心的', '高兴的', '超帅的', '懵懂的', '坦率的', '直率的', '轻松的',
        '痴情的', '完美的', '精明的', '无聊的', '魅力的', '丰富的', '繁荣的', '饱满的', '炙热的', '暴躁的', '碧蓝的', '俊逸的',
        '英勇的', '健忘的', '故意的', '无心的', '土豪的', '朴实的', '兴奋的', '幸福的', '淡定的', '不安的', '阔达的', '孤独的',
        '独特的', '疯狂的', '时尚的', '落后的', '风趣的', '忧伤的', '大胆的', '爱笑的', '矮小的', '健康的', '合适的', '玩命的',
        '英俊的', '霸气的', '阳光的', '默默的', '大力的', '孝顺的', '忧虑的', '着急的', '紧张的', '善良的', '凶狠的', '害怕的',
        '重要的', '危机的', '欢喜的', '欣慰的', '满意的', '跳跃的', '诚心的', '称心的', '如意的', '怡然的', '娇气的', '无奈的',
        '无语的', '激动的', '愤怒的', '美好的', '感动的', '激情的', '激昂的', '震动的', '虚拟的', '超级的', '寒冷的', '精明的',
        '明理的', '犹豫的', '忧郁的', '寂寞的', '奋斗的', '勤奋的', '现代的', '过时的', '稳重的', '热情的', '含蓄的', '开放的',
        '无辜的', '多情的', '纯真的', '拉长的', '热心的', '从容的', '体贴的', '风中的', '曾经的', '追寻的', '儒雅的', '优雅的',
        '开朗的', '外向的', '内向的', '清爽的', '文艺的', '长情的', '平常的', '单身的', '伶俐的', '高大的', '懦弱的', '柔弱的',
        '爱笑的', '乐观的', '耍酷的', '酷炫的', '神勇的', '年轻的', '唠叨的', '瘦瘦的', '无情的', '包容的', '顺心的', '畅快的',
        '舒适的', '靓丽的', '负责的', '背后的', '简单的', '谦让的', '彩色的', '缥缈的', '欢呼的', '生动的', '复杂的', '慈祥的',
        '仁爱的', '魔幻的', '虚幻的', '淡然的', '受伤的', '雪白的', '高高的', '糟糕的', '顺利的', '闪闪的', '羞涩的', '缓慢的',
        '迅速的', '优秀的', '聪明的', '含糊的', '俏皮的', '淡淡的', '坚强的', '平淡的', '欣喜的', '能干的', '灵巧的', '友好的',
        '机智的', '机灵的', '正直的', '谨慎的', '俭朴的', '殷勤的', '虚心的', '辛勤的', '自觉的', '无私的', '无限的', '踏实的',
        '老实的', '现实的', '可靠的', '务实的', '拼搏的', '个性的', '粗犷的', '活力的', '成就的', '勤劳的', '单纯的', '落寞的',
        '朴素的', '悲凉的', '忧心的', '洁净的', '清秀的', '自由的', '小巧的', '单薄的', '贪玩的', '刻苦的', '干净的', '壮观的',
        '和谐的', '文静的', '调皮的', '害羞的', '安详的', '自信的', '端庄的', '坚定的', '美满的', '舒心的', '温暖的', '专注的',
        '勤恳的', '美丽的', '腼腆的', '优美的', '甜美的', '甜蜜的', '整齐的', '动人的', '典雅的', '尊敬的', '舒服的', '妩媚的',
        '秀丽的', '喜悦的', '甜美的', '彪壮的', '强健的', '大方的', '俊秀的', '聪慧的', '迷人的', '陶醉的', '悦耳的', '动听的',
        '明亮的', '结实的', '魁梧的', '标致的', '清脆的', '敏感的', '光亮的', '大气的', '傻傻的', '知性的', '冷傲的', '呆萌的',
        '野性的', '隐形的', '冷艳的', '微笑的', '笨笨的', '难过的', '沉静的', '高挑的', '失眠的', '安静的', '纯情的', '忐忑的',
        '迷路的', '烂漫的', '哭泣的', '贤惠的', '苗条的', '温婉的', '发嗲的', '健壮的', '贪玩的', '执着的', '酷酷的', '花痴的',
        '甜甜的', '大意的', '高贵的', '傲娇的', '眼大的', '粗心的', '细腻的', '天真的', '怕黑的', '感性的', '飘逸的', '细心的',
        '沉默的', '斯文的', '香蕉', '苹果', '鲤鱼', '鳗鱼', '任性的', '爱撒娇的', '心灵美的', '想人陪的', '眯眯眼的', '会撒娇的',
        '怕孤独的', '要减肥的', '火星上的', '老迟到的', '笑点低的', '爱听歌的', '还单身的', '怕孤单的', '留胡子的'
    ];

    private static $nickNameN = [
        '嚓茶', '凉面', '便当', '毛豆', '花生', '可乐', '灯泡', '音响', '野狼', '背包', '眼神', '缘分',
        '雪碧', '人生', '牛排', '蚂蚁', '飞鸟', '灰狼', '斑马', '汉堡', '悟空', '巨人', '绿茶', '大碗',
        '墨镜', '魔镜', '煎饼', '月饼', '月亮', '星星', '芝麻', '啤酒', '玫瑰', '大叔', '小伙', '太阳',
        '树叶', '芹菜', '黄蜂', '蜜粉', '蜜蜂', '信封', '西装', '外套', '裙子', '大象', '猫咪', '母鸡',
        '路灯', '蓝天', '白云', '星月', '彩虹', '微笑', '摩托', '板栗', '高山', '大地', '大树', '砖头',
        '楼房', '水池', '鸡翅', '蜻蜓', '红牛', '咖啡', '枕头', '大船', '诺言', '钢笔', '刺猬', '天空',
        '飞机', '大炮', '冬天', '洋葱', '春天', '夏天', '秋天', '冬日', '航空', '毛衣', '豌豆', '黑米',
        '玉米', '眼睛', '老鼠', '白羊', '帅哥', '美女', '季节', '鲜花', '服饰', '裙子', '秀发', '大山',
        '火车', '汽车', '歌曲', '舞蹈', '老师', '导师', '方盒', '大米', '麦片', '水杯', '水壶', '手套',
        '鞋子', '鼠标', '手机', '电脑', '书本', '奇迹', '身影', '香烟', '夕阳', '台灯', '宝贝', '未来',
        '皮带', '钥匙', '心锁', '故事', '花瓣', '滑板', '画笔', '画板', '学姐', '店员', '电源', '饼干',
        '宝马', '过客', '大白', '时光', '石头', '钻石', '河马', '犀牛', '西牛', '绿草', '抽屉', '柜子',
        '往事', '寒风', '路人', '橘子', '耳机', '鸵鸟', '朋友', '苗条', '铅笔', '钢笔', '硬币', '热狗',
        '大侠', '御姐', '萝莉', '毛巾', '期待', '盼望', '白昼', '黑夜', '大门', '黑裤', '哑铃', '板凳',
        '枫叶', '荷花', '乌龟', '衬衫', '大神', '草丛', '早晨', '心情', '茉莉', '流沙', '蜗牛', '猎豹',
        '棒球', '篮球', '乐曲', '电话', '网络', '世界', '中心', '鱼', '鸡', '狗', '老虎', '鸭子', '雨',
        '羽毛', '翅膀', '外套', '火焰', '丝袜', '书包', '钢笔', '冷风', '烤鸡', '大雁', '音响', '招牌',
        '冰棍', '帽子', '菠萝', '蛋挞', '香水', '吐司', '溪流', '黄豆', '樱桃', '花卷', '荔枝', '镜子',
        '曲奇', '酒窝', '紫菜', '金鱼', '柚子', '果汁', '项链', '煎蛋', '唇彩', '戒指', '雪糕', '睫毛',
        '铃铛', '手链', '香氛', '红酒', '月光', '酸奶', '蜡烛', '糖豆', '薯片', '口红', '豆芽', '发箍',
        '发卡', '发夹', '发带', '铃铛', '冬瓜', '香菇', '短靴', '草莓', '柠檬', '月饼', '百合', '纸鹤',
        '云朵', '芒果', '面包', '海燕', '龙猫', '唇膏', '鞋垫', '绵羊', '黑猫', '白猫', '金毛', '山水',
        '金针菇', '自行车', '保温杯', '小土豆', '哈密瓜', '数据线', '冰淇淋', '电灯胆', '仙人掌', '含羞草', '机器猫', '白开水',
        '自行车', '钢铁侠', '战斗机', '冥王星', '胡萝卜', '八宝粥', '泥猴桃', '小鸽子', '小蝴蝶', '爆米花', '小鸭子', '小海豚',
        '日记本', '小熊猫', '小懒猪', '小懒虫', '百褶裙', '小松鼠', '小虾米', '帆布鞋', '火龙果', '奇异果', '银耳汤', '咖啡豆',
        '小蜜蜂', '小蚂蚁', '高跟鞋', '棉花糖', '向日葵', '水蜜桃', '小蝴蝶', '小刺猬', '小丸子', '指甲油', '康乃馨', '超短裙',
        '乌冬面', '棒棒糖', '长颈鹿', '小馒头', '小笼包', '小甜瓜', '睫毛膏', '小蘑菇', '跳跳糖', '小白菜', '小兔子', '小天鹅',
        '小猫咪', '万宝路', '哈密瓜'
    ];

    private static $femaleName = [
        "嘉", "琼", "桂", "娣", "叶", "璧", "璐", "娅", "琦", "晶", "妍", "茜", "秋", "珊", "莎", "锦", "黛", "青", "倩", "婷",
        "姣", "婉", "娴", "瑾", "颖", "露", "瑶", "怡", "婵", "雁", "蓓", "纨", "仪", "荷", "丹", "蓉", "眉", "君", "琴", "蕊",
        "薇", "菁", "梦", "岚", "苑", "婕", "馨", "瑗", "琰", "韵", "融", "园", "艺", "咏", "卿", "聪", "澜", "纯", "毓", "悦",
        "昭", "冰", "爽", "琬", "茗", "羽", "希", "宁", "欣", "飘", "育", "滢", "馥", "筠", "柔", "竹", "霭", "凝", "晓", "欢",
        "霄", "枫", "芸", "菲", "寒", "伊", "亚", "宜", "可", "姬", "舒", "影", "荔", "枝", "思", "丽", "秀", "娟", "英", "华",
        "慧", "巧", "美", "娜", "静", "淑", "惠", "珠", "翠", "雅", "芝", "玉", "萍", "红", "娥", "玲", "芬", "芳", "燕", "彩",
        "春", "菊", "勤", "珍", "贞", "莉", "兰", "凤", "洁", "梅", "琳", "素", "云", "莲", "真", "环", "雪", "荣", "爱", "妹",
        "霞", "香", "月", "莺", "媛", "艳", "瑞", "凡", "佳"
    ];

    private static $maleName = [
        "涛", "昌", "进", "林", "有", "坚", "和", "彪", "博", "诚", "先", "敬", "震", "振", "壮", "会", "群", "豪", "心", "邦",
        "承", "乐", "绍", "功", "松", "善", "厚", "庆", "磊", "民", "友", "裕", "河", "哲", "江", "超", "浩", "亮", "政", "谦",
        "亨", "奇", "固", "之", "轮", "翰", "朗", "伯", "宏", "言", "若", "鸣", "朋", "斌", "梁", "栋", "维", "启", "克", "伦",
        "翔", "旭", "鹏", "泽", "晨", "辰", "士", "以", "建", "家", "致", "树", "炎", "德", "行", "时", "泰", "盛", "雄", "琛",
        "钧", "冠", "策", "腾", "伟", "刚", "勇", "毅", "俊", "峰", "强", "军", "平", "保", "东", "文", "辉", "力", "明", "永",
        "健", "世", "广", "志", "义", "兴", "良", "海", "山", "仁", "波", "宁", "贵", "福", "生", "龙", "元", "全", "国", "胜",
        "学", "祥", "才", "发", "成", "康", "星", "光", "天", "达", "安", "岩", "中", "茂", "武", "新", "利", "清", "飞", "彬",
        "富", "顺", "信", "子", "杰", "楠", "榕", "风", "航", "弘"
    ];

    private static $familyNameSin = [
        "艾", "安", "敖", "巴", "白", "柏", "班", "包", "薄", "暴", "鲍", "贝", "毕", "边", "卞", "卜", "步", "蔡", "苍", "曹",
        "查", "柴", "昌", "常", "巢", "车", "陈", "成", "程", "池", "迟", "充", "仇", "储", "淳", "从", "崔", "戴", "单", "党",
        "邓", "狄", "翟", "刁", "丁", "东", "董", "都", "堵", "杜", "段", "鄂", "樊", "范", "方", "房", "费", "丰", "封", "冯",
        "凤", "扶", "符", "伏", "甫", "傅", "富", "盖", "干", "甘", "高", "戈", "葛", "耿", "龚", "公", "宫", "弓", "巩", "贡",
        "勾", "古", "谷", "顾", "关", "官", "管", "广", "桂", "郭", "国", "韩", "杭", "郝", "和", "何", "赫", "贺", "衡", "洪",
        "弘", "红", "侯", "候", "后", "胡", "花", "华", "滑", "怀", "桓", "宦", "黄", "皇", "惠", "霍", "姬", "吉", "籍", "汲",
        "蓟", "冀", "季", "计", "纪", "家", "贾", "简", "姜", "江", "蒋", "焦", "解", "金", "靳", "荆", "经", "井", "景", "鞠",
        "居", "康", "柯", "空", "孔", "寇", "匡", "赖", "蓝", "郎", "劳", "乐", "雷", "冷", "黎", "李", "厉", "利", "连", "廉",
        "梁", "廖", "林", "凌", "刘", "柳", "龙", "隆", "娄", "卢", "鲁", "路", "禄", "陆", "吕", "罗", "骆", "麻", "马", "满",
        "茅", "毛", "梅", "蒙", "孟", "糜", "米", "苗", "明", "莫", "慕", "牧", "穆", "那", "能", "倪", "聂", "宁", "牛", "钮",
        "农", "欧", "潘", "庞", "裴", "彭", "蓬", "皮", "平", "蒲", "浦", "戚", "齐", "祁", "钱", "强", "乔", "秦", "秋", "丘",
        "曲", "屈", "权", "全", "冉", "饶", "人", "任", "戎", "荣", "融", "容", "茹", "阮", "桑", "沙", "山", "上", "尚", "韶",
        "邵", "申", "沈", "慎", "盛", "师", "施", "石", "时", "史", "寿", "叔", "舒", "束", "双", "水", "司", "松", "宋", "苏",
        "宿", "孙", "索", "台", "太", "谭", "谈", "汤", "唐", "陶", "田", "通", "童", "屠", "万", "汪", "王", "危", "韦", "蔚",
        "魏", "尉", "卫", "文", "闻", "翁", "沃", "巫", "乌", "吴", "毋", "武", "伍", "席", "习", "夏", "咸", "相", "项", "向",
        "萧", "谢", "辛", "邢", "幸", "熊", "须", "徐", "许", "宣", "薛", "严", "颜", "阎", "燕", "杨", "羊", "阳", "仰", "养",
        "姚", "叶", "伊", "易", "益", "殷", "阴", "尹", "印", "应", "雍", "尤", "游", "于", "虞", "余", "俞", "鱼", "禹", "郁",
        "喻", "元", "袁", "越", "云", "宰", "曾", "詹", "湛", "章", "张", "甄", "政", "郑", "支", "治", "钟", "终", "仲", "周",
        "朱", "诸", "祝", "卓", "宗", "邹", "祖", "左", "乜", "厍", "蒯", "俟", "夔", "隗", "邬", "邴", "邰", "郏", "郦", "郜",
        "郗", "酆", "芮", "荀", "莘", "蔺", "奚", "嘤", "岑", "庾", "闵", "阙", "阚", "澹", "濮", "宓", "逄", "逯", "缪", "璩",
        "栾", "臧", "昝", "晁", "贲", "滕", "殳", "扈", "钭", "嵇", "窦", "褚", "胥", "竺", "裘", "暨", "羿", "訾", "瞿",
    ];

    private static $familyNameSur = [
        "百里", "佰赏", "鲍俎", "北堂", "碧鲁", "伯赏", "长孙", "陈林", "淳于", "达奚", "单于", "第五", "东方", "东宫", "东郭",
        "东里", "东门", "独孤", "端木", "段干", "范姜", "哥舒", "公伯", "公乘", "公户", "公坚", "公良", "公门", "公山", "公上",
        "公孙", "公西", "公羊", "公冶", "公仪", "公玉", "公仲", "公祖", "公皙", "谷梁", "贯丘", "归海", "赫连", "呼延", "胡母",
        "黄方", "皇甫", "即墨", "夹谷", "晋楚", "况后", "乐正", "梁丘", "令狐", "陆费", "伦续", "明哲", "墨哈", "幕容", "慕容",
        "纳兰", "南宫", "南官", "南郭", "南门", "南荣", "年爱", "欧阳", "漆雕", "屈突", "壤驷", "汝鄢", "商牟", "上官", "申屠",
        "侍其", "叔孙", "疏束", "司空", "司寇", "司马", "司徒", "太史", "太叔", "铁笔", "涂钦", "拓拔", "拓跋", "完完", "完颜",
        "万俟", "王子", "微生", "尉迟", "闻人", "巫马", "乌雅", "西门", "夏侯", "鲜于", "许世", "轩辕", "言福", "阎法", "羊舌",
        "阳佟", "耶律", "有琴", "余佴", "宇文", "辕轩", "岳帅", "宰父", "章佳", "张简", "郑余", "钟离", "仲长", "仲孙", "诸葛",
        "子车", "子桑", "子书", "子阳", "宗政", "左丘", "丌官", "亓官", "仉督", "佘佴", "谯笪", "闫法", "闾丘", "闾邱", "澹台",
        "濮阳", "缑亢", "褚师", "颛孙",
    ];
}
